home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / misc / math / permutation.lha / Permutation / permutation.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-08-27  |  1021 b   |  68 lines

  1. /* Permutation
  2. ** written by Ralf Gruner, Großschönau, Germany
  3. ** ralf.gruner@t-online.de
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9. #define maxchar 100
  10.  
  11. int number,index,level,i;
  12. char array[maxchar], text[maxchar], character, mask[maxchar];
  13.  
  14. void permute(void)
  15. {
  16.     int index;
  17.     level++;
  18.     for(index=0; index<number; index++)
  19.     {
  20.         if(mask[index])
  21.         {
  22.             text[level]=array[index];
  23.             mask[index]=0;
  24.             permute();
  25.             mask[index]=1;
  26.             if(level==number-1)
  27.             {
  28.                 for(i=0; i<number; putchar(text[i]), i++);
  29.                 putchar('\n');
  30.             }
  31.         }
  32.     }
  33.     level--;
  34. }
  35.  
  36. main(int argc, char *argv[])
  37. {
  38.     int test=1;
  39.  
  40.     if(argc>1)
  41.     {
  42.         level=-1;
  43.         number=strlen(argv[1]);
  44.         if(number>=maxchar) exit(10);
  45.         strcpy(array, argv[1]);
  46.     
  47.         while(test)
  48.         {    /* sortieren */
  49.             test=0;
  50.             for(i=0; i<number-1; i++)
  51.             {
  52.                 if(array[i]>array[i+1])
  53.                 {
  54.                     character=array[i];
  55.                     array[i]=array[i+1];
  56.                     array[i+1]=character;
  57.                     test=1;
  58.                 }
  59.             }
  60.         }
  61.     
  62.         for (index=0; index<number; index++)
  63.             mask[index]=1;
  64.         permute();
  65.     }
  66. }
  67.  
  68.